﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Data.SqlClient;
using DAL;
using BOL;
using BOL.Cliente;
using UtilityExtensions;
using System.Configuration;
using System.IO;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Website.Logger;
using MapControl;
using System.Text;
using System.Web.Script.Services;
using System.Web.Services;

namespace UILGestion.VentaAdmin.OrdenVenta
{
    public partial class OrdenVentaMapa : System.Web.UI.Page
    {

        

        [System.Web.Services.WebMethod(true)]
        public static string GetOrdenventa(string idUI)
        {
           
            var elem = idUI.Split('|');
            var idProyecto = elem[0];
            var idui = elem[1];
            var estado = elem[2];
            string result = idProyecto+"|";
            var ui = DbUtil.Db.OrdenVentaItems.SingleOrDefault(p => p.idUI == idui.ToInt() & p.OrdenVenta.idEstado != 10); //anulado
            if (ui!=null)
            {
                result = result+ui.idOrdenVenta.ToString();
            }
            return result;
        }
       
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
        private void InitializeComponent()
        {

          

        }

        public MapControl.ImageMap[] LabelArrayIdProd;
        public  MapControl.ImageMap mapa  ;
  
        private static int CantidadRegistros = 0; 

        protected void Page_Load(object sender, EventArgs e)
        {
            //if (!IsPostBack)      //no existe posback
            //{
                LoadMapaProyecto();
                var id = (string)Request.QueryString["idProyecto"];
                menuCtrl1.loadMenuVenta(id.ToInt());
                //this.NumberOfControls = 1;
                CrearControles();
           // }
            
        }


       

        public void LoadMapaProyecto()
        {
            var id = (string)Request.QueryString["idProyecto"];
            var Proyecto = DbUtil.Db.Proyectos.SingleOrDefault(p => p.idInternal == id.ToInt());
            if (Proyecto == null) { return; }

            mapProyecto.Areas.Clear();

            //map.ImageUrl = "../Images/elegiretapa.jpg";
            mapProyecto.ImageUrl = "../../Admin/ImagenSetForm.aspx?id={0}&type=Proyecto".Fmt(Proyecto.idArchivo);
            mapProyecto.Attributes.Add("CssClass", "mapHiLight");
            mapProyecto.Width = Unit.Parse(Proyecto.ancho.ToString());
            mapProyecto.Height = Unit.Parse(Proyecto.alto.ToString());

            foreach (var item in Proyecto.Etapas)
            {
                ImageMapPolygonArea etapas = new ImageMapPolygonArea();
                etapas.ToolTip = item.descripcion;
                etapas.HRef = string.Format("#etapa_{0}", item.idInternal.ToString());
                etapas.Attributes.Add("class","scroll");
                
                etapas.ID = string.Format("E:{0}", item.idInternal.ToString());
                etapas.Points = (item.mapCordenada == null) ? "" : item.mapCordenada;
                etapas.Attributes.Add("state", item.idInternal.ToString());
                mapProyecto.Areas.Add(etapas);

            }


        }
          protected int NumberOfControls
     {
         get { return (int)ViewState["NumControls"]; }
         set { ViewState["NumControls"] = value; }
     }
 
        protected override void CreateChildControls()
     {
         // Aqui estamos recreando los controles para que se mantengan en cada post back
             //if (this.NumberOfControls == 1)            {
             //    CrearControles();
             //}
             //else
             //{
             //    return;
             //}
    }

        private void LoadDetalle()
        {

            int idProyecto = ((string)Request.QueryString["idProyecto"]).ToInt();


            var proyecto = DbUtil.Db.Proyectos.SingleOrDefault(p => p.idInternal == idProyecto);

            if (proyecto == null)
            {
                return;
            }
            //--------------------------SCRIPT  PARA CONTROL DE EVENTOS---------

            StringBuilder script = new StringBuilder();
            script.AppendFormat("<script language=\"javascript\">{0}", Environment.NewLine);
            script.AppendFormat("\t$(document).ready(function () {0}{1}", "{", Environment.NewLine);
            //--------------------LITERAL
            
            string LIT = "<v:rect></v:rect>";


            //---------------------------------------------------------------
            //4	Edificacion
            //5	Vivienda

            var controles = new List<MapControl.ImageMap>();
            int i = -1;
            int s = 0;

            // 4: edificacion
            //5: viviendas
            //if (proyecto.idActividad == 5)
            //{
                var etapas = DbUtil.Db.Etapas.Where(p => p.idProyecto == idProyecto 
                    & p.bitActivo==true).OrderBy(o=>o.descripcion);
                CantidadRegistros = Convert.ToInt16(etapas.Count());
                LabelArrayIdProd = new MapControl.ImageMap[CantidadRegistros];

                //detallePNL.Width =Unit.Point(580);

                foreach (var item in etapas)
                {
                    i++;
                  
                    mapa = new MapControl.ImageMap();
                    mapa.Areas.Clear();
                    mapa.ID = "mapa_{0}".Fmt(item.idInternal.ToString());
                    mapa.ImageUrl = "../../Admin/ImagenSetForm.aspx?id={0}&type=Etapa".Fmt(item.idArchivo.ToInt());
                    mapa.Width = Unit.Parse(item.ancho.ToInt().ToString());
                    mapa.Height = Unit.Parse(item.alto.ToInt().ToString());
                   // mapa.Click += new ImageMapClickEventHandler(this.imageMap_Click);
                    //--------------------
                    
                    var idscript = "RegionPanel1$mainRegion$ContentPanel2${0}__MAP".Fmt(mapa.ID);
                    script.AppendFormat("\t\tvar $usamap_{0},{1}", mapa.ID, Environment.NewLine);
                    script.AppendFormat("\t\t$usamap_{0} = $('#{0}'); {1}", mapa.ID, Environment.NewLine);
                    script.AppendFormat("\t\t$usamap_{0}.mapster(default_options);{1}", mapa.ID, Environment.NewLine);
                    //-------------------

                    int w = 0;
                    //var lista=item.UIs.Where(p=>p.mapCordenada!=null & p.mapCordenada.Trim()!="");

                    var lista = from a in DbUtil.Db.OrdenVentaItems
                             where
                             a.OrdenVenta.idEstado != 10
                             & a.UI.idEtapa == item.idInternal
                             & a.UI.mapCordenada!=null 
                             & a.UI.mapCordenada.Trim()!=""
                             select a;


                    if   (proyecto.idActividad == 4)   //rectangululos torres
                    {
                                foreach (var ui in lista)
                                {
                                    w++;
                                    decimal pagado = ui.OrdenVentaFormatos.Sum(p => p.totalPago);
                                    decimal saldo = ui.total - pagado;



                                    ImageMapRectangleArea uis = new ImageMapRectangleArea();

                                    uis.HRef = null; //   string.Format("UI:{0}", item.idInternal.ToString());
                                    uis.ID = string.Format("{0}|{1}|{2}",idProyecto, ui.UI.idInternal,ui.UI.idEstado);
                                    uis.Rectangle = ui.UI.mapCordenada == null ? "" : ui.UI.mapCordenada;
                                    uis.Attributes.Add("id", "{0}".Fmt(ui.UI.idInternal));
                                    uis.Attributes.Add("state", "{1},{0}".Fmt(saldo>0?"PENDIENTE":"PAGADO", ui.idInternal));
                        
                                    mapa.Areas.Add(uis);
                       
                                    //--------------------tooltip
                                    

                                    string var = "<b>Descripción:</b> {1} {0} <br/> ".Fmt(ui.UI.UILocalizacion.descripcion, ui.UI.descripcion);
                                    var = var + "<b>Cliente: {0}</b>  <br/> ".Fmt(ui.OrdenVenta.Cliente.descripcion);
                                    var = var + "<b>Formato Venta:</b> {0}  <br/> ".Fmt(ui.OrdenVenta.FormatoVenta.descripcion);
                                    var = var + "<b>Precio:         S/. {0:N2} </b> <br/> ".Fmt(ui.total);
                                    var = var + "<b style=\\'color: #008000\\'>Pagado:          S/. {0:N2} </b> <br/> ".Fmt(pagado);
                                    var = var + "<b style=\\'color: {1}\\'>Saldo:           S/. {0:N2} </b> <br/> ".Fmt(saldo, saldo > 0 ? "#ff000c" : "#008000");
                                    var = var + "<b>F. {0}:</b>  {1} ".Fmt(ui.OrdenVenta.idEstado==5?"SEPARACION":"VENTA", ui.OrdenVenta.idEstado==5?ui.OrdenVenta.fecha.ToShortDateString():ui.OrdenVenta.fechaVenta.Value.ToShortDateString());
                                    

                                    script.AppendFormat("\t\t $('#{0}').tooltip({1}", ui.idUI, "{"); ///id del mapa
                                    script.AppendFormat("\t\t delay: 0,  fade: 250,   showURL: false,     bodyHandler: function() {0}", "{");
                                    script.AppendFormat("\t\t return '{2}';     {1} {0});", "}", "}", var);

                                    //-------------------------------
                                    //-------------------------------
                                }
                    }
                    else  //poligonos
                    {
                                    foreach (var ui in lista)
                                {
                                    decimal pagado = ui.OrdenVentaFormatos.Sum(p => p.totalPago);
                                    decimal saldo = ui.total - pagado;

                                    ImageMapPolygonArea uis = new ImageMapPolygonArea();

                                    uis.HRef = null; //   string.Format("UI:{0}", item.idInternal.ToString());

                                    uis.ID = string.Format("{0}|{1}|{2}", idProyecto, ui.UI.idInternal, ui.UI.idEstado);
                                    uis.Points = ui.UI.mapCordenada == null ? "" : ui.UI.mapCordenada;
                                    //string vl = xMapa.Replace("<1MA>", char.ConvertFromUtf32(39));
                                    uis.Attributes.Add("id", "{0}".Fmt(ui.UI.idInternal));
                                    uis.Attributes.Add("state", "{1},{0}".Fmt(saldo > 0 ? "PENDIENTE" : "PAGADO", ui.idInternal));
                                    mapa.Areas.Add(uis);
                                    //--------------------tooltip

                                    string var = "<b>Descripción:</b> {1} {0} <br/> ".Fmt(ui.UI.UILocalizacion.descripcion, ui.UI.descripcion);
                                    var = var + "<b>Cliente: {0}</b>  <br/> ".Fmt(ui.OrdenVenta.Cliente.descripcion);
                                    var = var + "<b>Formato Venta:</b> {0}  <br/> ".Fmt(ui.OrdenVenta.FormatoVenta.descripcion);
                                    var = var + "<b>Precio:         S/. {0:N2} </b> <br/> ".Fmt(ui.total);
                                    var = var + "<b style=\\'color: #008000\\'>Pagado:          S/. {0:N2} </b> <br/> ".Fmt(pagado);
                                    var = var + "<b style=\\'color: {1}\\'>Saldo:           S/. {0:N2} </b> <br/> ".Fmt(saldo, saldo > 0 ? "#ff000c" : "#008000");
                                    var = var + "<b>F. {0}:</b>  {1} ".Fmt(ui.OrdenVenta.idEstado == 5 ? "SEPARACION" : "VENTA", ui.OrdenVenta.idEstado == 5 ? ui.OrdenVenta.fecha.ToShortDateString() : ui.OrdenVenta.fechaVenta.Value.ToShortDateString());
                                    
                                    script.AppendFormat("\t\t $('#{0}').tooltip({1}", ui.UI.idInternal, "{");
                                    script.AppendFormat("\t\t delay: 0, showBody: ' - ', fade: 250,   showURL: false,     bodyHandler: function() {0}", "{");
                                    script.AppendFormat("\t\t return '{2}';     {1} {0});", "}", "}", var);

                                    //string var = "<b>Descripción:</b> {1} {0} <br/> ".Fmt(ui.UI.UILocalizacion.descripcion, ui.UI.descripcion);
                                    //var = var + "<b>Precio: S/. {0:N2} </b> <br/> ".Fmt(ui.UI.precio);
                                    //var = var + "<b>Area Ocupada:</b> {0:N2} m2  <br/> ".Fmt(ui.UI.areaOcupada);
                                    //var = var + "<b>Vista:</b>  {0} <br/>".Fmt(ui.UI.GrupoDatoitem.descripcion);
                                    //var = var + "<b>Estado:</b>  {0} ".Fmt(ui.UI.EstadoItem.descripcion);
                                    //script.AppendFormat("\t\t $('#{0}').tooltip({1}", ui.UI.idInternal, "{");
                                    //script.AppendFormat("\t\t delay: 0,  fade: 250,   showURL: false,     bodyHandler: function() {0}", "{");
                                    //script.AppendFormat("\t\t return '{2}';     {1} {0});", "}", "}", var);

                                    //-------------------------------

                                }
                    }
                    //LabelArrayIdProd[i] = mapa;
                          // titulo
                            TableRow tr= new TableRow();
                            tr.CssClass = "Heading secTitle AreaHeading ms-crm-List-Header";
                            TableCell td =new TableCell();
                            td.Text="<a name='etapa_{2}' id='etapa_{2}'><b>{0}: {1}</b>".Fmt(item.nombre,item.descripcion,item.idInternal);
                            td.HorizontalAlign = HorizontalAlign.Center;
                            

                    
                            tr.Controls.Add(td);

                            TableRow trsup = new TableRow();
                            TableCell tdsup = new TableCell();
                            tdsup.Text = "</br> ";
                            trsup.Controls.Add(tdsup);
                          
                           //detalle
                            TableRow tr3= new TableRow();
                            TableCell td3 =new TableCell();
                            td3.Attributes.Add("align", "center");
                                    td3.Controls.Add(new LiteralControl(LIT));
                                    td3.Controls.Add(mapa);
                            tr3.Controls.Add(td3);

                            TableRow trinf = new TableRow();
                            TableCell tdinf = new TableCell();
                            tdinf.Text = "</br> ";
                            trinf.Controls.Add(tdinf);

                            //pie
                            TableRow tr2 = new TableRow();
                            tr2.CssClass = "maptablacel6";
                            TableCell td2 = new TableCell();

                            tr2.Controls.Add(td2);


                            this.etapasTable.Controls.Add(tr);

                            this.etapasTable.Controls.Add(trsup);
                            this.etapasTable.Controls.Add(tr3);
                            this.etapasTable.Controls.Add(trinf);
                            this.etapasTable.Controls.Add(tr2);



            }
            
               

            //----------------------------------------------------------------------------
            script.AppendFormat("\t{0});{1}", "}", Environment.NewLine);
            script.Append("</script>");


            Page.RegisterClientScriptBlock("__IMAGEMAP_onClick", script.ToString());     //no retirar

        }
        public void imageMap_Click(object sender, ImageMapClickEventArgs args)
        {
            // si biene de proyecto

            //ImageMapArea area = map.Areas[args.AreaIndex];
            string[] imagen = args.ID.Split(':');
            switch (imagen[0])
            {
                case "P":
                    // LoadMapaProyecto();
                    break;
                case "E":
                    // LoadMapaEtapa(imagen[1].ToInt(), 0);
                    break;
                case "L":

                    // LoadDepartamentos(imagen[1].ToInt(), 0);
                    break;
                case "UI":
                    // loadUI(imagen[1].ToInt());

                    break;

                default:
                    break;
            }

        }
 

        //Creamos los controles
     protected void CrearControles()
     {
         //************************************************************
         
         LoadDetalle();
   
        
       
 
    }
 
//Guardar los datos
 protected void LinkButtonGuardarReg_Click(object sender, EventArgs e)
     {
 
                //InsertarCapura();
                 this.NumberOfControls = 0;
                  //
     }

 protected void AceptarBtn_Click(object sender, EventArgs e)
 {

 }
 
   //protected void InsertarCapura()
   //  {
 
   //     for (int i = 0; i < CantidadRegistros; i++)
   //      {
         
   //             string InsertarDesglose = "INSERT INTO Desglose "
   //                                      + "(id_producto, invtot) "
   //                                      + "VALUES (" + Convert.ToInt16(this.LabelArrayIdProd[i].Text) + ", "
   //                                      + " + Convert.ToInt16(this.TBArrayInvTot[i].Text)) ";
 
   //             OleDbConnection MiConexion = new OleDbConnection(MiConeccion);
   //              OleDbCommand MiInsert = new OleDbCommand(InsertarDesglose, MiConexion);
   //              MiInsert.Connection.Open();
   //              MiInsert.ExecuteNonQuery();
   //              MiInsert.Connection.Close();
   //           }
   //      }




    }
}